? ? ? ? ?一般來說,如果一個系統(或主機)負荷突然升高甚至失去響應,使用Netstat 命令能看到大量SYN_RCVD的半連接(數量>500或占總連接數的10%以上),可以認定,這個系統(或主機)遭到了SYN Flood攻擊。遭到SYN Flood攻擊后,首先要做的是取證,通過Netstat –n –p tcp >resault.txt記錄目前所有TCP連接狀態是必要的,如果有嗅探器,或者TcpDump之類的工具,記錄TCP SYN報文的所有細節也有助于以后追查和防御,需要記錄的字段有:源地址、IP首部中的標識、TCP首部中的序列號、TTL值等,這些信息雖然很可能是攻擊者偽造的,但是用來分析攻擊者的心理狀態和攻擊程序也不無幫助。特別是TTL值,如果大量的攻擊包似乎來自不同的IP但是TTL值卻相同,我們往往能推斷出攻擊者與我們之間的路由器距離,至少也可以通過過濾特定TTL值的報文降低被攻擊系統的負荷(在這種情況下TTL值與攻擊報文不同的用戶就可以恢復正常訪問)。從防御角度來說,有幾種簡單的解決方法:
解決方法
第一種是縮短SYN Timeout時間,
第二種方法是設置SYN Cookie,
第三種方法 負反饋策略: 參考一些流行的操作系統,如windows2000的SYN攻擊保護機制:正常情況下,OS對TCP連接的一些重要參數有一個常規的設置: SYN Timeout時間、SYN-ACK的重試次數、SYN報文從路由器到系統再到Winsock的延時等等。這個常規設置針對系統優化,可以給用戶提供方便快捷的服務;一旦服務器受到攻擊,SYN Half link 的數量超過系統中TCP活動 Half Connction最大連接數的設置,系統將會認為自己受到了SYN Flood攻擊,并將根據攻擊的判斷情況作出反應:減短SYN Timeout時間、減少SYN-ACK的重試次數、自動對緩沖區中的報文進行延時等等措施,力圖將攻擊危害減到最低。如果攻擊繼續,超過了系統允許的最大Half Connection 值,系統已經不能提供正常的服務了,為了保證系統不崩潰,可以將任何超出最大Half Connection 值范圍的SYN報文隨機丟棄,保證系統的穩定性。
所以,可以事先測試或者預測該主機在峰值時期的Half Connction 的活動數量上限,以其作為參考設定TCP活動 Half Connction最大連接數的值,然后再以該值的倍數(不要超過2)作為TCP最大Half Connection值,這樣可以通過負反饋的手段在一定程度上阻止SYN攻擊。
第四種退讓策略 :退讓策略是基于SYN Flood攻擊代碼的一個缺陷,我們重新來分析一下SYN Flood攻擊者的流程:SYN Flood程序有兩種攻擊方式,基于IP的和基于域名的,前者是攻擊者自己進行域名解析并將IP地址傳遞給攻擊程序,后者是攻擊程序自動進行域名解析,但是它們有一點是相同的,就是一旦攻擊開始,將不會再進行域名解析,我們的切入點正是這里:假設一臺服務器在受到SYN Flood攻擊后迅速更換自己的IP地址,那么攻擊者仍在不斷攻擊的只是一個空的IP地址,并沒有任何主機,而防御方只要將DNS解析更改到新的IP地址就能在很短的時間內(取決于DNS的刷新時間)恢復用戶通過域名進行的正常訪問。為了迷惑攻擊者,我們甚至可以放置一臺“犧牲”服務器讓攻擊者滿足于攻擊的“效果”(由于DNS緩沖的原因,只要攻擊者的瀏覽器不重起,他訪問的仍然是原先的IP地址)。
第五種分布式DNS負載均衡: 在眾多的負載均衡架構中,基于DNS解析的負載均衡本身就擁有對SYN Flood的免疫力,基于DNS解析的負載均衡能將用戶的請求分配到不同IP的服務器主機上,攻擊者攻擊的永遠只是其中一臺服務器,一來這樣增加了攻擊者的成本,二來過多的DNS請求可以幫助我們追查攻擊者的真正蹤跡(DNS請求不同于SYN攻擊,是需要返回數據的,所以很難進行IP偽裝)。
第六種 防火墻Qos:對于防火墻來說, 防御SYN Flood攻擊的方法取決于防火墻工作的基本原理,一般說來,防火墻可以工作在TCP層之上或IP層之下,工作在TCP層之上的防火墻稱為網關型防火墻,網關型防火墻布局中,客戶機與服務器之間并沒有真正的TCP連接,客戶機與服務器之間的所有數據交換都是通過防火墻代理的,外部的DNS解析也同樣指向防火墻,所以如果網站被攻擊,真正受到攻擊的是防火墻,這種防火墻的優點是穩定性好,抗打擊能力強,但是因為所有的TCP報文都需要經過防火墻轉發,所以效率比較低由于客戶機并不直接與服務器建立連接,在TCP連接沒有完成時防火墻不會去向后臺的服務器建立新的TCP連接,所以攻擊者無法越過防火墻直接攻擊后臺服務器,只要防火墻本身做的足夠強壯,這種架構可以抵抗相當強度的SYN Flood攻擊。但是由于防火墻實際建立的TCP連接數為用戶連接數的兩倍(防火墻兩端都需要建立TCP連接),同時又代理了所有的來自客戶端的TCP請求和數據傳送,在系統訪問量較大時,防火墻自身的負荷會比較高,所以這種架構并不能適用于大型網站。(我感覺,對于這樣的防火墻架構,使用TCP_STATE攻擊估計會相當有效:)?
工作在IP層或IP層之下的稱為路由型防火墻,其工作原理有所不同:客戶機直接與服務器進行TCP連接,防火墻起的是路由器的作用,它截獲所有通過的包并進行過濾,通過過濾的包被轉發給服務器,外部的DNS解析也直接指向服務器,這種防火墻的優點是效率高,可以適應100Mbps-1Gbps的流量,但是這種防火墻如果配置不當,不僅可以讓攻擊者越過防火墻直接攻擊內部服務器,甚至有可能放大攻擊的強度,導致整個系統崩潰。?
在這兩種基本模型之外,有一種新的防火墻模型,它集中了兩種防火墻的優勢,這種防火墻的工作原理如下所示:?
第一階段,客戶機請求與防火墻建立連接:?
第二階段,防火墻偽裝成客戶機與后臺的服務器建立連接?
第三階段,之后所有從客戶機來的TCP報文防火墻都直接轉發給后臺的服務器?
這種結構吸取了上兩種防火墻的優點,既能完全控制所有的SYN報文,又不需要對所有的TCP數據報文進行代理,是一種兩全其美的方法。近來,國外和國內的一些防火墻廠商開始研究帶寬控制技術,如果能真正做到嚴格控制、分配帶寬,就能很大程度上防御絕大多數的SYN攻擊。
有關IDS的建議?
由于許多用來擊敗基于網絡的入侵檢測系統的方法對絕大多數商業入侵檢測系統產品仍然是有效的,因此建議入侵檢測系統應該至少有能重組或發覺碎片的自尋址數據包。下面是部分要注意的事項:?
確信包括了現有的所有規則,包括一些針對分布式拒絕服務攻擊的新規則。如果遵循了ICMP建議項,許多ICMP會被阻塞,入侵檢測系統觸發器存在許多機會。任何通常情況下要被阻塞的入站或出站的ICMP數據包可以被觸發。 "任何"被你用防火墻分離的網絡傳輸都可能是一個潛在的IDS觸發器。?
如果你的入侵檢測系統支持探測長時間周期的攻擊,確信沒有把允許通過防火墻的被信任主機排除在外。這也包括虛擬專用網。 如果你能訓練每個使用ping的用戶在ping主機時使用小數據包,就可能設置入侵檢測系統尋找超29字節的Echo和Echo應答數據包。